﻿using SIIE_ERP.BaseDatos.Bancos.Catalogos;
using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.Ventas.Arrendamiento
{
    public class dbo_Cat_Inmueble
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion
        
        #region Constructores

        public dbo_Cat_Inmueble(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion
        
        #region INSERT

        public Respuesta Insert_Inmueble(
            string Nombre,
            int Id_Colaborador,
            int Id_Moneda,
            string DireccionCompleta,
            string NumPredial,
            double ImporteRenta,
            int Id_Estado,
            int Id_Pais,	        
            string Calle = "",
	        string Num_Ext = "",
	        string Num_Int = "",
	        string Entre_Calle_1 = "",
	        string Entre_Calle_2 = "",
	        string Colonia = "",
	        string Referencia = "",
	        string Población = "",
	        string CP = "",
	        string Municipio = ""	        
        )
        {
            try
            {
                string Query = @"INSERT INTO dbo_Cat_Inmueble
                             (
                                Id_Inmueble,
	                            Nombre,
                                RFC,	                            
	                            Id_Colaborador,                         
	                            Id_Moneda,
	                            Calle,
	                            Num_Ext,
	                            Num_Int,
	                            Entre_Calle_1,
	                            Entre_Calle_2,
	                            Colonia,
	                            Referencia,
	                            Población,
	                            CP,
	                            Id_Estado,
	                            Id_Pais,
	                            Municipio,
                                DireccionCompleta,
                                NumPredial,
                                ImporteRenta,
	                            Fecha_Alta,
	                            Usuario_Alta,
	                            Fecha_Mantto,
	                            Usuario_Mantto
                             )
                             VALUES
                             (
                                IIF(DCount('*', 'dbo_Cat_Inmueble') = 0, 1, DMax('Id_Inmueble', 'dbo_Cat_Inmueble') + 1),                                
                                '@@Nombre',
                                '@@RFC',
	                            @@Id_Colaborador,
	                            @@Id_Moneda,
	                            '@@Calle',
	                            '@@Num_Ext',
	                            '@@Num_Int',
	                            '@@Entre_Calle_1',
	                            '@@Entre_Calle_2',
	                            '@@Colonia',
	                            '@@Referencia',
	                            '@@Población',
	                            '@@CP',
                                @@Id_Estado,
	                            @@Id_Pais,	                            
	                            '@@Municipio',
                                '@@DireccionCompleta',
                                '@@NumPredial',
                                @@ImporteRenta,	                            
	                            NOW(),
                                '@@Usuario_Alta',
                                NOW(),
                                '@@Usuario_Mantto'
                             )";

                Query = Query.Replace("@@RFC", this._RFC);                
                Query = Query.Replace("@@Nombre", Nombre);
                Query = Query.Replace("@@Id_Colaborador", Id_Colaborador.ToString());
                Query = Query.Replace("@@Id_Moneda", Id_Moneda.ToString());
                Query = Query.Replace("@@Calle", Calle);
                Query = Query.Replace("@@Num_Ext", Num_Ext);
                Query = Query.Replace("@@Num_Int", Num_Int);
                Query = Query.Replace("@@Entre_Calle_1", Entre_Calle_1);
                Query = Query.Replace("@@Entre_Calle_2", Entre_Calle_2);
                Query = Query.Replace("@@Colonia", Colonia);
                Query = Query.Replace("@@Referencia", Referencia);
                Query = Query.Replace("@@Población", Población);
                Query = Query.Replace("@@Id_Estado", Id_Estado.ToString());
                Query = Query.Replace("@@Id_Pais", Id_Pais.ToString());
                Query = Query.Replace("@@CP", CP);
                Query = Query.Replace("@@Municipio", Municipio);
                Query = Query.Replace("@@DireccionCompleta", DireccionCompleta);
                Query = Query.Replace("@@NumPredial", NumPredial);
                Query = Query.Replace("@@ImporteRenta", ImporteRenta.ToString());                                
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);

                return SrvDB.ExecuteQuery_Insert(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }            
        }

        #endregion

        #region UPDATE

        public Respuesta Update_Inmueble_Por_Id(
            object Id,

            string Nombre,
            int Id_Colaborador,
            int Id_Moneda,
            string DireccionCompleta,
            string NumPredial,
            double ImporteRenta,
            int Id_Estado,
            int Id_Pais,
            string Calle = "",
            string Num_Ext = "",
            string Num_Int = "",
            string Entre_Calle_1 = "",
            string Entre_Calle_2 = "",
            string Colonia = "",
            string Referencia = "",
            string Población = "",
            string CP = "",
            string Municipio = ""
        )
        {
            try
            {
                string Query = @"UPDATE dbo_Cat_Inmueble SET
                                        
	                                Nombre = '@@Nombre',                             
	                                Id_Colaborador = @@Id_Colaborador,
	                                Id_Moneda = @@Id_Moneda,
	                                Calle = '@@Calle',
	                                Num_Ext = '@@Num_Ext',
	                                Num_Int= '@@Num_Int',
	                                Entre_Calle_1 = '@@Entre_Calle_1',
	                                Entre_Calle_2 = '@@Entre_Calle_2',
	                                Colonia = '@@Colonia',
	                                Referencia = '@@Referencia',
	                                Población = '@@Población',
	                                CP = '@@CP',
                                    Id_Estado = @@Id_Estado,
	                                Id_Pais = @@Id_Pais,	                            
	                                Municipio = '@@Municipio',
                                    DireccionCompleta = '@@DireccionCompleta',
                                    NumPredial = '@@NumPredial',
                                    ImporteRenta = @@ImporteRenta,	                            
                                    Fecha_Mantto = NOW(),
                                    Usuario_Mantto = '@@Usuario_Mantto'

                                 WHERE Id_Inmueble = @@Id";

                
                Query = Query.Replace("@@RFC", this._RFC);
                Query = Query.Replace("@@Nombre", Nombre);
                Query = Query.Replace("@@Id_Colaborador", Id_Colaborador.ToString());
                Query = Query.Replace("@@Id_Moneda", Id_Moneda.ToString());
                Query = Query.Replace("@@Calle", Calle);
                Query = Query.Replace("@@Num_Ext", Num_Ext);
                Query = Query.Replace("@@Num_Int", Num_Int);
                Query = Query.Replace("@@Entre_Calle_1", Entre_Calle_1);
                Query = Query.Replace("@@Entre_Calle_2", Entre_Calle_2);
                Query = Query.Replace("@@Colonia", Colonia);
                Query = Query.Replace("@@Referencia", Referencia);
                Query = Query.Replace("@@Población", Población);
                Query = Query.Replace("@@Id_Estado", Id_Estado.ToString());
                Query = Query.Replace("@@Id_Pais", Id_Pais.ToString());
                Query = Query.Replace("@@CP", CP);
                Query = Query.Replace("@@Municipio", Municipio);
                Query = Query.Replace("@@DireccionCompleta", DireccionCompleta);
                Query = Query.Replace("@@NumPredial", NumPredial);
                Query = Query.Replace("@@ImporteRenta", ImporteRenta.ToString());
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);
                Query = Query.Replace("@@Id", ((Int32)Id).ToString());

                return SrvDB.ExecuteQuery_Update(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region DELETE

        public Respuesta Delete_Inmueble_Por_Id(
            object Id
        )
        {
            try
            {
                string Query = @"DELETE FROM dbo_Cat_Inmueble 
                                    WHERE Id_Inmueble = @@Id";

                Query = Query.Replace("@@Id", ((Int32)Id).ToString());

                return SrvDB.ExecuteQuery_Delete(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region SELECT

        public DataTable Get_Inmueble_Por_Id(object Id)
        {

            string Query = @"SELECT 
                            
                                A1.*,
								
								A2.Nombre AS Desc_Colaborador,
								A3.Nombre AS Desc_Moneda,
								A4.Nombre AS Desc_Estado,
								A5.Nombre AS Desc_Pais

                            FROM ((((dbo_Cat_Inmueble AS A1
                            
                                INNER JOIN dbo_Cat_Colaborador       AS A2 ON A1.Id_Colaborador = A2.Id_Colaborador)
                                INNER JOIN dbo_Cat_Moneda       AS A3 ON A1.Id_Moneda = A3.Id_Moneda)
                                INNER JOIN dbo_Cat_SIIE_Estado       AS A4 ON A1.Id_Estado = A4.Id_SIIE_Estado)
                                INNER JOIN dbo_Cat_SIIE_Pais       AS A5 ON A1.Id_Pais = A5.Id_SIIE_Pais)

                        WHERE A1.Id_Inmueble = @@Id";
            Query = Query.Replace("@@Id", ((Int32)Id).ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Inmueble_Por_Id(object Id, int Id_Moneda)
        {

            string Query = @"SELECT 
                            
                                A1.*,
								
								A2.Nombre AS Desc_Colaborador,
								A3.Nombre AS Desc_Moneda,
								A4.Nombre AS Desc_Estado,
								A5.Nombre AS Desc_Pais

                            FROM ((((dbo_Cat_Inmueble AS A1
                            
                                INNER JOIN dbo_Cat_Colaborador       AS A2 ON A1.Id_Colaborador = A2.Id_Colaborador)
                                INNER JOIN dbo_Cat_Moneda       AS A3 ON A1.Id_Moneda = A3.Id_Moneda)
                                INNER JOIN dbo_Cat_SIIE_Estado       AS A4 ON A1.Id_Estado = A4.Id_SIIE_Estado)
                                INNER JOIN dbo_Cat_SIIE_Pais       AS A5 ON A1.Id_Pais = A5.Id_SIIE_Pais)

                        WHERE A1.Id_Inmueble = @@Id";
            Query = Query.Replace("@@Id", ((Int32)Id).ToString());

            DataTable dt_Result = SrvDB.ExecuteQuery_Get(Query);

            double AuxTipoC = 0;

            dbo_Cat_TipoCambio TipoCambio = new dbo_Cat_TipoCambio(_RFC, _Usuario);
            DataTable dt_TiposCambios = TipoCambio.Get_TipoCambios();

            dbo_Cat_Moneda MiMoneda = new dbo_Cat_Moneda(_RFC, _Usuario);
            DataTable dt_MiMoneda = MiMoneda.Get_Moneda_Por_Id(Id_Moneda);

            if (dt_Result.Rows[0]["Id_Moneda"].ToString().Equals(dt_MiMoneda.Rows[0]["Id_Moneda"].ToString()))
                return dt_Result;

            if (!dt_Result.Rows[0]["Desc_Moneda"].ToString().Equals("Pesos Mexicanos"))
            {
                for (int i = 0; i < dt_TiposCambios.Rows.Count; i++)
                {
                    if (dt_TiposCambios.Rows[i]["Id_Moneda"].ToString().Equals(dt_Result.Rows[0]["Id_Moneda"].ToString()))
                    {
                        AuxTipoC = Double.Parse(dt_TiposCambios.Rows[i]["TipoCambio"].ToString());
                    }
                }

                dt_Result.Rows[0]["ImporteRenta"] = (Double.Parse(dt_Result.Rows[0]["ImporteRenta"].ToString()) * AuxTipoC).ToString();                
            }

            for (int i = 0; i < dt_TiposCambios.Rows.Count; i++)
            {
                if (dt_TiposCambios.Rows[i]["Id_Moneda"].ToString().Equals(Id_Moneda.ToString()))
                {
                    AuxTipoC = Double.Parse(dt_TiposCambios.Rows[i]["TipoCambio"].ToString());
                }
            }

            dt_Result.Rows[0]["ImporteRenta"] = (Double.Parse(dt_Result.Rows[0]["ImporteRenta"].ToString()) / AuxTipoC).ToString();

            return dt_Result;
        }


        public DataTable Get_Inmueble_Por_Nombre(string Nombre)
        {

            string Query = @"SELECT 
                            
                                A1.*,
								
								A2.Nombre AS Desc_Colaborador,
								A3.Nombre AS Desc_Moneda,
								A4.Nombre AS Desc_Estado,
								A5.Nombre AS Desc_Pais

                            FROM ((((dbo_Cat_Inmueble AS A1
                            
                                INNER JOIN dbo_Cat_Colaborador       AS A2 ON A1.Id_Colaborador = A2.Id_Colaborador)
                                INNER JOIN dbo_Cat_Moneda       AS A3 ON A1.Id_Moneda = A3.Id_Moneda)
                                INNER JOIN dbo_Cat_SIIE_Estado       AS A4 ON A1.Id_Estado = A4.Id_SIIE_Estado)
                                INNER JOIN dbo_Cat_SIIE_Pais       AS A5 ON A1.Id_Pais = A5.Id_SIIE_Pais)
                            
                            WHERE A1.Nombre = '@@Nombre' AND A1.RFC = '@@RFC'";

            Query = Query.Replace("@@Nombre", Nombre);
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Inmueblees()
        {
            string Query = @"SELECT 
                            
                                A1.*,
								
								A2.Nombre AS Desc_Colaborador,
								A3.Nombre AS Desc_Moneda,
								A4.Nombre AS Desc_Estado,
								A5.Nombre AS Desc_Pais

                            FROM ((((dbo_Cat_Inmueble AS A1
                            
                                INNER JOIN dbo_Cat_Colaborador       AS A2 ON A1.Id_Colaborador = A2.Id_Colaborador)
                                INNER JOIN dbo_Cat_Moneda       AS A3 ON A1.Id_Moneda = A3.Id_Moneda)
                                INNER JOIN dbo_Cat_SIIE_Estado       AS A4 ON A1.Id_Estado = A4.Id_SIIE_Estado)
                                INNER JOIN dbo_Cat_SIIE_Pais       AS A5 ON A1.Id_Pais = A5.Id_SIIE_Pais)

                            WHERE A1.RFC = '@@RFC'";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Inmuebles_AutoComplete()
        {
            string Query = @"SELECT Id_Inmueble, Nombre
                            
                            FROM dbo_Cat_Inmueble

                            WHERE RFC = '@@RFC'";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        #endregion
    }
}
